// - reducer 分支 goods
let data = {
    list:[]
}

import * as actionTypes from '../constants'
// 引用式赋值
export default function(state=data,action){
    switch(action.type){
        case actionTypes.SET_ALL_GOODS:
            let list=action.data
            list.map(item=>{
                item.check=true
            })
            return Object.assign({},state,{list:list})
        // reducer 重新计算 财务的角度
        // 选择或返回
        case actionTypes.CHECK_GOODS:
            // reducer 重新计算前的状态 旧状态
            let checkList=state.list
            checkList.map(item=>{
                if(item.goodsId==action.data){
                    item.check=!item.check
                    item.goodsNum=='0'?item.goodsNum='1':''
                }
            })
            return Object.assign({},state,{list:[...checkList]})
        case actionTypes.CHANGE_GOODS_NUM:
            // data:{id:id,status:'add|minus'}
            let changeList=state.list
            changeList.map(item=>{
                if(item.goodsId===action.data.goodsId){
                    action.data.status=='add'?item.goodsNum++:item.goodsNum--
                    item.goodsNum=='0'? item.check=false:''
                    // -1 UI 去做item.goods>0 && <button>-</button>
                }
            })
            return Object.assign({},state,{list:[...changeList]})
        case actionTypes.CHECK_ALL_GOODS:
            // 全选和取消全选
            let checkAllList=state.list
            checkAllList.map(item=>{
                item.check=!action.data
            })
            return Object.assign({},state,{list:[...checkAllList]})
        default:
            
            // 返回一个全新的对象 拥有 state list
            // 为了搞定引用式赋值
            // 使用 Object.addign() 以后会用 ImmutableJS
            // 将新的状态 与原来的状态在物理层面上 绝对分开
            // 每一刻的状态都留下来 可以被追溯
            return state
    }
}